IF exists(SELECT * FROM dbo.sysobjects WHERE name='vulHulpAfwezigen' AND xtype='P') 
BEGIN
	DROP PROCEDURE vulHulpAfwezigen
END
GO

CREATE        procedure vulHulpAfwezigen @maandNr int
as

set nocount on

/*
De procedure maakt de tabel 'hulpAfwezigen' leeg.
Daarna worden de leraars en de  kalendergegevens uit de gekozen maand in de tabel geplaatst. 
De leraars worden allen als aanwezig aangeduid.
De gegevens uit de tabel 'afwezigheden' worden tenslotte over deze
default-gegevens geschreven.
*/

 
  --De kalendergegevens worden overgebracht
  
  declare @veelStreepjes varchar(500)
  declare @dagnamen varchar(500)
  declare @voormiddag char(1)
  declare @namiddag char(1)
  declare @teller  int
  declare @sqlZin varchar(2000) 
  declare @datumAanduiding varchar(20) 
  declare @deDatum datetime

  declare kalender cursor for
    select voormiddag,namiddag,datum from leerlingen..kalender 
           where datepart(month,datum)= @maandNr
           order by datum asc
  open kalender
  
  set @veelStreepjes = ' '
  fetch next from kalender into @voormiddag,@namiddag,@deDatum
  exec naamMaandJaar @datum=@deDatum, @naam = @datumAanduiding output

  set @veelStreepjes = @veelStreepjes + '''' + convert(varchar(30),@deDatum) + ''''
  set @teller=1
  while @@fetch_status = 0
    begin  
	if (@voormiddag = 'X') 
      	  set @veelStreepjes = @veelStreepjes + ',''X'''
  	Else
      	  set @veelStreepjes = @veelStreepjes + ',''|'''
  
  	If (@namiddag = 'X') 
      	  set @veelStreepjes = @veelStreepjes + ',''X'''
  	Else
      	  set @veelStreepjes = @veelStreepjes + ',''|'''
  	fetch next from kalender into @voormiddag,@namiddag,@deDatum
	set @teller = @teller + 1
     end
  deAllocate kalender
  while @teller < 32
    begin
        set @veelStreepjes = @veelStreepjes + ', NULL, NULL'
	set @teller = @teller + 1
    end
  
  --De veldnamen worden opgebouwd
  
  set @dagNamen = 'v1,n1'
  set @teller = 2
  while @teller < 32
    begin
      set @dagNamen = @dagNamen + ',v' + convert(varchar(2),@teller) + ',n' + convert(varchar(2),@teller)
      set @teller = @teller + 1
    end

--De oude gegevens uit de hulptabel worden gewist.

delete from hulpAfwezigen

--De kalendergegevens en default-streepjes worden voor elke leraar ingebracht

set @sqlzin = 'insert into hulpAfwezigen(naamcode,deNaam,maand, ' 
	+ 'datumAanduiding,startDatum,' + @dagNamen + ') ' 
        + 'select distinct l.naamcode,l.achternaam + '' ''  + l.voornaam,'
	+ convert(char(2),@maandNr) + ',''' + @datumAanduiding
	+ ''', ' + @veelStreepjes
        + ' from leraars as l where not l.naamcode is null order by l.naamcode' 
--  print @sqlzin
  execute(@sqlZin)

-- De afwezigheden worden ingevoerd uit de tabel 'afwezigheden'
  declare @naamcode varchar(7)
  declare @datum dateTime
  declare @dagdeel char(1)
  declare @reden char(1)
  declare @deDag varchar(2)
  
  declare deAfwezigen cursor for
    select a.naamcode, a.datum, a.dagdeel, a.reden 
    from afwezigheden as a left join leraars as l
       	on l.naamcode = a.naamcode
    where (datepart(month,a.datum) = @maandNr)
  open deAfwezigen

  set @sqlZin = ''
  fetch next from deAfwezigen into @naamcode,@datum,@dagdeel,@reden
  while (@@fetch_status = 0)
  begin 
    set @deDag = convert(varchar(2),datePart(day,@datum))
    if (@dagdeel = '2') or (@dagdeel = '3') or (@dagdeel = '4') set @dagdeel = 'G' 
    if (@dagdeel = '5') or (@dagdeel = '6') or (@dagdeel = '7') set @dagdeel = 'N'
    If @dagdeel = 'G' 
      begin
        set @sqlZin = 'update hulpAfwezigen ' +
            'set v' + @deDag + '=''' + @reden + ''',n' + @deDag 
	  + '=''' + @reden + ''' where naamcode = ''' + @naamcode + ''''
      end
    If @dagdeel = 'V' Or @dagdeel = 'N'
      begin
        set @sqlZin = 'update hulpAfwezigen ' + 
            'set ' + @dagdeel + @deDag + '=''' + @reden +
  	    ''' where naamcode = ''' + @naamcode + ''''
      end	
--    print @sqlZin
    execute(@sqlZin)
    fetch next from deAfwezigen into @naamcode,@datum,@dagdeel,@reden
  end
  deallocate deAfwezigen